#!/usr/bin/php
<?php
/**
 * DolphinGTK - phpGtk framework
 *
 * @package    DolphinGTK
 * @author     Askarov Ruslan
 * @copyright  Askarov Ruslan (c) 2010.
 * @link       http://groups.google.com/group/dolphingtk
 * @license    http://www.opensource.org/licenses/gpl-license.php GPL
 * @version    0.1
 * @since      PHP v.: 5.2.1
 * @subpackage desktop
 * @category   main
 * @filesource
 */

// обьявляем переменную, с абсолютным путём до файла
define('BASE_DIR', rtrim(str_replace('\\', '/', dirname(__FILE__)), '/'). '/');
// подключаем необходимые функции, для работы
include BASE_DIR . 'library/functions.php';

// подключение библиотек
load('window'); // работа с окном
load('table');  // работа с табличками
load('tray');   // работа с треем
load('menu');   // работа с меню
load('os');     // и соответственно ОС

// запускаем только одну копию процесса
// в противном случае, просто ничего не
// произайдет. процесс умрёт.
// эта функция напрямую зависит от
// функции close_terms. только если
// установлен флаг=true, то в этом случае
// будет записан pid(posix), и по нему
// будет происходить проверка копии.
Win::close_if_copy();

// если нужно что бы процесс освободил
// терминал и стал независимым.
// для кого-то этот вариант очень
// удобен. так же записывается pid
// процесса.
Win::close_terms(false);

/**
 * Создаем окно приложения
 *
 * его нужно всегда создавать в начале
 * т.к. при создании окна, у нас задается
 * локаль, и идёт стандартная проверка
 * необходимых модулей самого php
 */
Win::create();

#---------------------------------------------------------------------------#
// 
/**
 * Меню основного окна.
 *
 * Для мультиязычности, используем функцию i18n
 * пример: i18n('Hello'); или i18n('Hello %s', 'Word');
 */
$menu = array();

$menu[ i18n('File') ] = array(
  array( i18n('Save'), 'menu', 'ctrl+s', 'save' ),
  array( i18n('Quit'), 'quit', 'ctrl+q', 'quit' )
);

$menu[ i18n('Manual') ] = array(
  array( i18n('About'), 'menu', 'ctrl+a', 'images/about.png' ),
  array( i18n('Help'),  'menu', false, 'about' )
);

$menu[ i18n('Quit') ] = array('quit');
//
#---------------------------------------------------------------------------#
//
// Меню в трее
$tray_menu = array(
  array( i18n('About'), 'menu', false, 'images/about.png'   ),
  array( i18n('Hide/Show'),  array('Tray', 'hide_or_show'), false, 'close' )
);
//
#---------------------------------------------------------------------------#


// задали заголовк
Win::title('DolphinGTK v.0.1');
// задали размер окна
Win::size(600,300);
// задали границы
Win::border(0);
// запретили менять размеры
Win::resizable(false);
// задали положение окна
Win::position('center');
// задали задний фон
Win::bg('images/bg.jpg');
// указали иконку
Win::icon('images/dolphin.png');
Win::decorated(true);
// разрешили показывать в пейджере
Win::on_pager(true);
Win::stick(true);
Win::state(false);
// разрешили показывать на панеле задач
Win::on_taskbar(true);
// во весь экран запретим
Win::fullscreen(false);
// задали функцию для отлова клавиш
Win::on_key('my_key');
// задали меню
Win::menu($menu);

// подгрузили главную страницу
Win::load('main_page');
// подгрузили контент
Win::load('copyright');
// задали статус бар
Win::statusbar('Loading ...');
// и показали само окно
Win::show(true);


// для примера, задаём простенькие таймеры
Win::timeout( 'add', 'status', 1000 );
Win::timeout( 'add', 'HideWin', 2000 );
Win::timeout( 'add', array('ClassShow','window'), 3000 );
Win::timeout( 'add', 'Move', 4000 );
Win::timeout( 'add', 'Alert', 5000 );
Win::timeout( 'add', 'Confirm', 7000 );
Win::timeout( 'add',    'HideWin', 10000 );
Win::timeout( 'remove', 'HideWin', 8000  );
Win::timeout( 'add', 'Prompt', 10000  );

// создать экземпляр в трее
Tray::create();
// добавили подсказку
Tray::tooltips('DolphinGTK v.0.1');
// добавили иконку
Tray::icon( 'images/dolphin.png' );
// создали меню. второй флаг - активация
// клика показ или сокрытие окна
Tray::menu( $tray_menu, true );
// высплывающее окно в трее
// Tray::notify( 'DolphinGTK notify!' );

// Необходимое инфо, для приложения
#print OS::get_tmp() . "\n";
#print OS::get_profile() . "\n";
#print OS::get_appdata() . "\n";
#print OS::get_documents() . "\n";
#print OS::exec('ps');

// если человек закрывает программу
Win::on_quit('if_quit');

// создали главное окно
Win::main();


// Спрашиваем имя человека
function Prompt() {

  $entered =
  Win::prompt(
    array(
      'What is u name?' => ''
    )
  );

  Win::alert( 
    WIN_TITLE, 'Thank for use, ' . $entered[0]
  );
}

class ClassShow {
  function window() {
    print "Show now\n";
    Win::show(true);
  }
}

function HideWin() {
  print "Hidden now\n";
  Win::show(false);
}

function my_key( $key ) {

  // стрелочка вверх
  if( $key == 65362 ) {
    #Tray::notify( 'Hello Word' );
  }

  // стрелочка вниз
  if( $key == 65364 ) {
    #Tray::notify_hide();
  }

  // клавиша Esc
  if( $key == 65307 ) {
    Tray::hide_or_show();
  }
  //print "Press key: $key\n";
}

function Move() {
  print "Move now\n";
  Win::move(0,0);
}

function Alert() {
  Win::alert( WIN_TITLE, 'Your OS is ' . ucfirst(Win::$os) . '.' );
}

function Confirm() {
  $conf = Win::confirm( WIN_TITLE, 'Это приложение на PHP-GTK?!' );
  if( $conf ) {
    Win::alert( WIN_TITLE, 'Выбрали "Да".' );
  } else {
    Win::alert( WIN_TITLE, 'Выбрали "Нет".' );
  }
}

function quit() {
  Gtk::main_quit();
}

function menu() {
  print "Clicked\n";
}

function status() {
  Win::statusbar_update('Ready ...');
}


/**
 * Функция, для отлова события при выходе
 *
 * @return bool
 */
function if_quit()
{
  $conf = Win::confirm(
    WIN_TITLE, i18n('Are you sure?')
  );

  if( $conf === true ) {
    quit();
    return false;
  }

  return true;
}
?>